/**
 * 系统菜单类型定义
 */

/** 菜单类型枚举 */
export enum MenuType {
  /** 目录 */
  DIRECTORY = 'M',
  /** 菜单 */
  MENU = 'C', 
  /** 按钮 */
  BUTTON = 'F'
}

/**
 * 菜单查询
 */
export interface MenuQuery {
  /** 关键词搜索（菜单名称、权限标识） */
  keyword?: string
  /** 菜单状态(0-禁用, 1-正常) */
  status?: number
}

/**
 * 系统菜单
 */
export interface Menu {
  /** 菜单ID */
  id: string
  /** 菜单名称 */
  name: string
  /** 父级菜单ID */
  parentId: string | null
  /** 菜单类型 M:目录 C:菜单 F:按钮 */
  type: MenuType
  /** 菜单图标 */
  icon?: string
  /** 排序号 */
  orderNum: number
  /** 路由路径 */
  path?: string
  /** 组件路径 */
  component?: string
  /** 路由参数 */
  query?: string
  /** 是否外链 */
  isExternal?: boolean
  /** 是否缓存 */
  isCache?: boolean
  /** 是否显示 */
  isVisible?: boolean
  /** 状态(0-禁用, 1-正常) */
  status: number
  /** 权限标识 */
  permission?: string
  /** 创建时间 */
  createTime: string
  /** 更新时间 */
  updateTime?: string
  /** 子菜单 */
  children?: Menu[]
  /** 状态加载中 */
  statusLoading?: boolean
}

/**
 * 创建菜单
 */
export interface CreateMenu {
  /** 菜单名称 */
  name: string
  /** 父级菜单ID */
  parentId: string | null
  /** 菜单类型 */
  type: MenuType
  /** 菜单图标 */
  icon?: string
  /** 排序号 */
  orderNum: number
  /** 路由路径 */
  path?: string
  /** 组件路径 */
  component?: string
  /** 路由参数 */
  query?: string
  /** 是否外链 */
  isExternal?: boolean
  /** 是否缓存 */
  isCache?: boolean
  /** 是否显示 */
  isVisible?: boolean
  /** 权限标识 */
  permission?: string
  /** 状态(0-禁用, 1-正常) */
  status: number
}

/**
 * 更新菜单
 */
export interface UpdateMenu {
  /** 菜单名称 */
  name?: string
  /** 父级菜单ID */
  parentId?: string | null
  /** 菜单类型 */
  type?: MenuType
  /** 菜单图标 */
  icon?: string
  /** 排序号 */
  orderNum?: number
  /** 路由路径 */
  path?: string
  /** 组件路径 */
  component?: string
  /** 路由参数 */
  query?: string
  /** 是否外链 */
  isExternal?: boolean
  /** 是否缓存 */
  isCache?: boolean
  /** 是否显示 */
  isVisible?: boolean
  /** 权限标识 */
  permission?: string
  /** 状态(0-禁用, 1-正常) */
  status?: number
}

/**
 * 菜单列表响应
 */
export interface MenuList {
  /** 菜单列表 */
  list: Menu[]
  /** 总数 */
  total: number
} 